package com.mrzhou.study.struct.array;

/**
 * 数组的基本操作
 */
public class ArrayList<T> {

    private T[] array = (T[]) new Object[10];
    private int size; // 的数据大小

    /**
     * 从数组尾部添加元素;
     *  时间复杂度O(n): n为数组中元素的大小
     */
    public void add(T t, int index) {
        if(index == array.length-1) {
            array[array.length -1] = t;
        } else {
            // 从数组中的最后一个元素开始向后移一位
            for(int i = size; i > index; i--) {
                if(array[i -1] != null ) {
                    array[i] = array[i-1];
                }
            }
            array[index] = t;
        }
        size++;
    }

    /**
     * 删除数组下表的元素;
     *  时间复杂度O(n): n为数组中元素的大小
     * @param index
     */
    public void remove(int index) {
        boolean flag = false;
        for(int i = index; i < size; i++) {
            flag = true;
            if(i < size-1) {
                array[i] = array[i+1];
            } else {
                array[i] = null;
            }
        }
        if(flag) {
            size--;
        }
    }

    public String toString() {
        StringBuffer sb = new StringBuffer("[");
        for(int i = 0; i < size; i++) {
            if(i == size -1) {
                sb.append(array[i]);
            } else {
                sb.append(array[i] + ", ");
            }
        }
        sb.append("]");
        return sb.toString();
    }

    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<>();
        array.add("1", 0);
        array.add("3", 1);
        array.add("4", 2);
        array.add("5", 3);
        array.add("2", 1);
        array.add("6", 0);
        array.add("7", 5);
        array.add("8", 6);
        array.add("0", 0);
        array.add("9", 9);
        System.out.println("删除前数组中包含: "+ array);
        array.remove(1);
        array.remove(8);
        array.remove(0);
        System.out.println("删除后数组中包含: " + array);
    }

}
